perm filename ROTORS[ROT,WD] blob
sn#421013 filedate 1979-02-24 generic text, type T, neo UTF8
00100 (DEFPROP COMPACTION EVAL DEFACTION)
00200
00300 (DEFPROP OCTAL (LAMBDA (X) (PROG2 (EVAL X) (FLUSHEXPR X))) COMPACTION)
00400
00500 (DEFPROP DECIMAL (LAMBDA (X) (PROG2 (EVAL X) (FLUSHEXPR X))) COMPACTION)
00600
00700 (OCTAL)
00800
00900 (DECLARE (SPECIAL PRINTIT LIMCARRY EITHEROR ROTSIZ MARG1 MARG2 MARG3)
01000 (SPECIAL *SP *TB *CR *LF *VT *FF *CO *PT *LP *RP *SL *AM *AT *RO *COLON)
01100 (SPECIAL IBASE BASE *NOPOINT INUM0))
01200
01300 (DM (WHILE L)
01400 (APPEND (QUOTE (PROG NIL LOOP))
01500 (LIST (LIST (QUOTE COND)
01600 (LIST (LIST (QUOTE NOT) (CADR L))
01700 (QUOTE (RETURN NIL)))))
01800 (CDDR L)
01900 (QUOTE ((GO LOOP)))))
02000
02100 (DE (ROTORSTEP PRINTIT ROTORS STARTS)
02200 (PROG (POSITS1 POSITS1SAV POSITS2 POSITS2SAV ROTS SIZES INITSKIPS
02300 CARRIES COUNT NEWPOS OLDPOS POSDIF)
02400 (SETQ ROTORS (REVERSE ROTORS))
02500 (SETQ STARTS (REVERSE STARTS))
02600 (SETQ COUNT -1)
02700 (SETQ SIZES (MAPCAR (FUNCTION CAR) ROTORS))
02800 (SETQ INITSKIPS (MAPCAR (FUNCTION CAADR) ROTORS))
02900 (SETQ CARRIES (MAPCAR (FUNCTION CADADR) ROTORS))
03000 (SETQ ROTS (MAPCAR (FUNCTION CDDR) ROTORS))
03100 (SETQ POSITS1 (SETUP ROTS STARTS))
03200 (SETQ POSITS2 POSITS1)
03300 LOOP (SETQ COUNT (ADD1 COUNT))
03400 (COND (PRINTIT (PRINT COUNT)
03500 (PRINC *TB)
03600 (PRINC (SETQ NEWPOS (MAPCAR (FUNCTION CAAR)
03700 (REVERSE POSITS1))))
03800 (TABTO MARG1)
03900 (COND (OLDPOS (PRINC (SETQ POSDIF
04000 (MODVECDIF NEWPOS
04100 OLDPOS
04200 SIZES)))
04300 (TABTO MARG2)
04400 (PRIN1 (MODDERIV POSDIF
04500 SIZES))
04600 (TABTO MARG3)
04700 (PRIN1 (HAMWEIGHT POSDIF))))))
04800 (SETQ OLDPOS NEWPOS)
04900 (SETQ POSITS1SAV POSITS1)
05000 (SETQ POSITS1 (ONESTEP POSITS1 ROTS INITSKIPS CARRIES))
05100 (COND (FLOYDTEST
05200 (SETQ POSITS2SAV POSITS2)
05300 (COND (PRINTIT (PRINT (MAPCAR (FUNCTION CAAR) (REVERSE POSITS1)))))
05400 (SETQ POSITS2 (ONESTEP POSITS2 ROTS INITSKIPS CARRIES))
05500 (COND (PRINTIT (PRINC (MAPCAR (FUNCTION CAAR) (REVERSE POSITS2)))))
05600 (SETQ POSITS2 (ONESTEP POSITS2 ROTS INITSKIPS CARRIES))
05700 (COND (PRINTIT (PRINC (MAPCAR (FUNCTION CAAR) (REVERSE POSITS2)))))
05800 (COND ((EQUAL POSITS1 POSITS2)
05900 (PRINT (LIST (MAPCAR (FUNCTION CAAR) POSITS1SAV)
06000 (MAPCAR (FUNCTION CAAR) POSITS2SAV)))
06100 (RETURN (ADD1 COUNT)))))
06200 (T (COND ((EQUAL POSITS1 ROTS) (RETURN (ADD1 COUNT))))))
06300 (GO LOOP)))
06400
00100 (DE (ONESTEP POSITS ROTS INITSKIPS CARRYSKIPS)
00200 (PROG (ANS POSIT ROT INITSKIP CARRYSKIP KICKSIN KICKSOUT)
00300 (SETQ KICKSIN 0)
00400 (SETQ KICKSOUT 0)
00500 (WHILE POSITS
00600 (COND (LIMCARRY (SETQ KICKSOUT 0)))
00700 (SETQ POSIT (CAR POSITS))
00800 (SETQ ROT (CAR ROTS))
00900 (SETQ INITSKIP (CAR INITSKIPS))
01000 (COND ((AND EITHEROR (NOT (ZEROP KICKSIN)))
01100 (SETQ INITSKIP 0)))
01200 (WHILE (GREATERP INITSKIP 0)
01300 (COND ((NOT (ZEROP (CADAR POSIT)))
01400 (SETQ POSIT (CDR POSIT))))
01500 (COND ((NULL POSIT) (SETQ POSIT ROT)))
01600 (COND ((NOT (ZEROP (CADDAR POSIT)))
01700 (SETQ KICKSOUT (ADD1 KICKSOUT))))
01800 (SETQ INITSKIP (SUB1 INITSKIP)))
01900 (WHILE (GREATERP KICKSIN 0)
02000 (SETQ CARRYSKIP (CAR CARRYSKIPS))
02100 (WHILE (GREATERP CARRYSKIP 0)
02200 (SETQ POSIT (CDR POSIT))
02300 (COND ((NULL POSIT) (SETQ POSIT ROT)))
02400 (COND ((NOT (ZEROP (CADDAR POSIT)))
02500 (SETQ KICKSOUT (ADD1 KICKSOUT))))
02600 (SETQ CARRYSKIP (SUB1 CARRYSKIP)))
02700 (SETQ KICKSIN (SUB1 KICKSIN)))
02800 (SETQ ANS (CONS POSIT ANS))
02900 (SETQ KICKSIN KICKSOUT)
03000 (SETQ POSITS (CDR POSITS))
03100 (SETQ ROTS (CDR ROTS))
03200 (SETQ INITSKIPS (CDR INITSKIPS))
03300 (SETQ CARRYSKIPS (CDR CARRYSKIPS)))
03400 (RETURN (REVERSE ANS))))
03500
03600 (DE (*MAX X Y) (COND ((*GREAT X Y) X) (T Y)))
03700
03800 (DE (*MIN X Y) (COND ((*LESS X Y) X) (T Y)))
03900
04000 (DE (ZEROLIST N)
04100 (COND ((ZEROP N) NIL) (T (CONS 0 (ZEROLIST (SUB1 N))))))
04200
04300 (DE (ALLZERO L)
04400 (OR (NULL L) (AND (ZEROP (CAR L)) (ALLZERO (CDR L)))))
04500
04600 (DE (HAMWEIGHT L)
04700 (COND ((NULL L) 0)
04800 ((ZEROP (CAR L)) (HAMWEIGHT (CDR L)))
04900 (T (ADD1 (HAMWEIGHT (CDR L))))))
05000
05100 (DE (MODABSDIF X Y M) (COND ((*LESS X Y) (*DIF Y X)) (T (*DIF X Y))))
05200
05300 (DE (MODVECDIF X Y M)
05400 (PROG (Z)
05500 LOOP (COND ((NULL X) (RETURN (REVERSE Z))))
05600 (SETQ Z (CONS (MODDIF (CAR X) (CAR Y) (CAR M)) Z))
05700 (SETQ X (CDR X))
05800 (SETQ Y (CDR Y))
05900 (SETQ M (CDR M))
06000 (GO LOOP)))
06100
06200 (DE (MODDERIV V S)
06300 (PROG (ANS)
06400 (WHILE (CDR V)
06500 (SETQ ANS (CONS (MODABSDIF (CADR V)
06600 (CAR V)
06700 (*MAX (CAR S) (CADR S)))
06800 ANS))
06900 (SETQ V (CDR V)))
07000 (RETURN (REVERSE ANS))))
07100
07200 (DE (MODDIF X Y M)
07300 ((LAMBDA (Z) (*MIN Z (*DIF M Z)))
07400 (COND ((*LESS X Y) (*DIF Y X)) (T (*DIF X Y)))))
07500
07600 (DE (MODDIF X Y M)
07700 (COND ((*LESS X Y) (*DIF M (*DIF Y X))) (T (*DIF X Y))))
07800
07900 (DE (CURCOL) (DIFFERENCE (ADD1 (LINELENGTH NIL)) (CHRCT)))
08000
00100 (DE (PRINTN CHAR NUM)
00200 (PROG (NO)
00300 (SETQ NO 1)
00400 LOOP (COND ((LESSP NUM NO) (RETURN NUM)))
00500 (PRINC CHAR)
00600 (SETQ NO (ADD1 NO))
00700 (GO LOOP)))
00800
00900 (DE (TABTO COL)
01000 (PROG NIL
01100 (COND ((GREATERP (CURCOL) COL) (LINEF 1)))
01200 (PRINTN *TB
01300 (DIFFERENCE (LSH (SUB1 COL) -3)
01400 (LSH (SUB1 (CURCOL)) -3)))
01500 (PRINTN *SP (DIFFERENCE COL (CURCOL)))))
01600
01700 (SETQ *TB (ASCII 11))
01800
01900 (SETQ *SP (ASCII 40))
02000
02100 (SETQ PRINTIT T)
02200
02300 (PROG NIL
02400 (PRINT *TB)
02500 (PRINC @ ********)
02600 (PRINC *SP)
02700 (PRINC @ PRINTIT)
02800 (PRINC *SP)
02900 (PRINC @ LOC)
03000 (PRINC *SP)
03100 (PRINC @IS)
03200 (PRINC *SP)
03300 (PRINC (MAKNUM (GET @ PRINTIT @ VALUE) @ FIXNUM))
03400 (PRINC *SP)
03500 (PRINC @ ********))
03600
03700 (SETQ LIMCARRY T)
03800
03900 (SETQ EITHEROR T)
04000
04100 (SETQ FLOYDTEST T)
04200
04300 (DECIMAL)
04400
04500 (SETQ *NOPOINT T)
04600
04700 (SETQ MARG1 30)
04800
04900 (SETQ MARG2 50)
05000
05100 (SETQ MARG3 65)
05200
05300 (DE (SETUP ROTORS STARTS)
05400 (PROG (ANS ROT)
05500 (WHILE (AND (NOT (NULL ROTORS)) (NOT (NULL STARTS)))
05600 (SETQ ROT (CAR ROTORS))
05700 (WHILE (AND (NOT (NULL ROT))
05800 (NOT (EQ (CAAR ROT) (CAR STARTS))))
05900 (SETQ ROT (CDR ROT)))
06000 (SETQ ANS (CONS ROT ANS))
06100 (SETQ ROTORS (CDR ROTORS))
06200 (SETQ STARTS (CDR STARTS)))
06300 (RETURN (REVERSE ANS))))
06400